import java.util.ArrayList;
import java.util.List;
public class Solution {
    public List<Integer> findAnagrams(String ss, String pp) {
        List<Integer> ret = new ArrayList<Integer>();
        char[] s = ss.toCharArray();
        char[] p = pp.toCharArray();

        int[] hash1 = new int[26];
        int m = p.length;
        for(char ch : p)
            hash1[ch - 'a']++;

        int[] hash2 = new int[26];
        for(int left = 0,right = 0,count = 0; right < s.length; right++){
            char in = s[right];
            if(++hash2[in - 'a'] <= hash1[in - 'a'])
                count++;
            if(right - left + 1 > m) {
                char out = s[left++];
                if(hash2[out-'a']-- <= hash1[out - 'a'])
                    count--;
            }
            if(count == m)
                ret.add(left);
        }
        return ret;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String ss = "cbaebabacd";
        String pp = "abc";
        List<Integer> result = solution.findAnagrams(ss, pp);
        System.out.println(result);
    }
}
